package cn.byzk.xframe.web.session.util;

import cn.byzk.xframe.web.common.constant.enums.CommonResponseEnum;
import cn.byzk.xframe.web.session.model.SessionUser;
import org.springframework.util.StringUtils;

public class SessionUtil {

    private static final String TOKEN_KEY = "bk-token";

    /**
     * 获取token(key=bk-token)
     * @author xcf
     * @date 2021/5/5 23:58
     * @return java.lang.String;null:没有token，未登陆用户
     */
    public static String getToken() {
        String token = String.valueOf(RequestHolder.getRequest().getHeader(TOKEN_KEY));
        if (StringUtils.isEmpty(token)) {
            return null;
        }
        return token;
    }

    public static String getTokenFromSession() {
        String token = String.valueOf(RequestHolder.getSession(TOKEN_KEY));
        if (StringUtils.isEmpty(token)) {
            return null;
        }
        return token;
    }

    public static String getTokenFromSession(int pos) {
        String token = "";
        if (1 == pos) {
            token = String.valueOf(RequestHolder.getSession(SessionUser.TOKEN_KEY));
        } else if (2 == pos) {
            token = String.valueOf(RequestHolder.getSession(SessionUser.TOKEN_KEY_2));
        } else if (3 == pos) {
            token = String.valueOf(RequestHolder.getSession(SessionUser.TOKEN_KEY_3));
        }

        if (StringUtils.isEmpty(token)) {
            return null;
        }
        return token;
    }

    public static String getToken(int pos) {
        String token = "";
        if (1 == pos) {
            token = String.valueOf(RequestHolder.getRequest().getHeader(SessionUser.TOKEN_KEY));
        } else if (2 == pos) {
            token = String.valueOf(RequestHolder.getRequest().getHeader(SessionUser.TOKEN_KEY_2));
        } else if (3 == pos) {
            token = String.valueOf(RequestHolder.getRequest().getHeader(SessionUser.TOKEN_KEY_3));
        }

        if (StringUtils.isEmpty(token)) {
            return null;
        }
        return token;
    }

    /**
     * 设置Token
     * @author xcf
     * @date 2021/5/6 0:02
     * @param token
     */
    public static void setToken(String token) {
        RequestHolder.setSession(TOKEN_KEY, token);
    }

    public static void setToken(String tokenName, String token) {
        RequestHolder.setSession(tokenName, token);
    }

    /**
     * 删除Token信息
     */
    public static void removeToken(String key) {
        RequestHolder.removeSession(key);
    }

    /**
     * 删除所有的session信息
     */
    public static void removeAllSession() {
        String[] keys = RequestHolder.getSessionKeys();
        if (keys != null && keys.length > 0) {
            for (String key : keys) {
                RequestHolder.removeSession(key);
            }
        }
    }


    /**
     * 当前是否登录
     *
     * @return
     */
    public static boolean isLogin() {
        String token = String.valueOf(RequestHolder.getSession("bk-token"));
        if (StringUtils.isEmpty(token)) {
            CommonResponseEnum.IS_NOT_LOGIN.assertFail();
        }

        return true;
    }

    /**
     * 获取session中的用户信息
     *
     * @return User
     */
//    public static User getUser() {
//        return (User) RequestHolder.getSession(SessionConst.USER_SESSION_KEY);
//    }

    /**
     * 添加session
     *
     * @param user
     */
//    public static void setUser(User user) {
//        RequestHolder.setSession(SessionConst.USER_SESSION_KEY, user);
//    }

    /**
     * 删除session信息
     */
    public static void removeUser() {
        //RequestHolder.removeSession(SessionConst.USER_SESSION_KEY);
    }






//    /**
//     * 获取验证码
//     */
//    public static String getKaptcha() {
//        return (String) RequestHolder.getSession(SessionConst.KAPTCHA_SESSION_KEY);
//    }
//
//    /**
//     * 保存验证码
//     */
//    public static void setKaptcha(String kaptcha) {
//        RequestHolder.setSession(SessionConst.KAPTCHA_SESSION_KEY, kaptcha);
//    }
//
//    /**
//     * 保存验证码
//     */
//    public static void removeKaptcha() {
//        RequestHolder.removeSession(SessionConst.KAPTCHA_SESSION_KEY);
//    }


}
